package cn.feizhu.aimarket.utils;


import cn.dev33.satoken.stp.StpUtil;
import cn.feizhu.aimarket.constant.FileConstant;
import cn.feizhu.aimarket.model.enums.FileDirBizEnums;
import cn.hutool.core.io.FileUtil;

import java.io.File;

/**
 * 根据业务类型拼接生成文件目录
 * 从StpUtil中获取存储的userId和appId
 */
public class FileDirBuildUtils {

    /**
     * 集成了从Stp中获取userId和appId的方法
     * 这里我们根据业务类型拼接吧
     * 这里我们直接就是使用的BOOK，我们就生成书这种
     * @return 不主动构建文件夹
     */
    public static String buildFileDir(FileDirBizEnums fileDirBizEnums, Long userId, Long appId) {
        final String separator = File.separator;
        return switch (fileDirBizEnums) {
            case BOOK -> // 类似 项目根目录/book/appID/userID/ 这种目录  TODO 这里传入的上下文未初始化
                    FileConstant.FILE_SAVE_DIR + separator + "book" + separator +
                            appId + separator +
                            userId;
            case DOC -> FileConstant.FILE_SAVE_DIR + separator + "doc";
            case IMG -> FileConstant.FILE_SAVE_DIR + separator + "img";
            case OTHER -> FileConstant.FILE_SAVE_DIR + separator + "other";
        };
    }

    /**
     * 这里我们可以自定义目录名称
     *
     * @param fileDirBizEnums 业务生成文件目录类型
     * @param dirName       自定义目录名称
     * @return              返回完整目录(含有构建目录)
     */
    public static String buildFileDir(FileDirBizEnums fileDirBizEnums, String dirName, Long appId, Long userId) {
        String rootDir = buildFileDir(fileDirBizEnums, userId, appId);
        if(!FileUtil.exist(rootDir)){
            // 先创建目录
            FileUtil.mkdir(rootDir);
        }
        String dirPath = rootDir + File.separator + dirName;
        if(!FileUtil.exist(dirPath)){
            // 先创建目录
            FileUtil.mkdir(dirPath);
        }
        return dirPath;
    }

}
